﻿using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Xml.Linq;

namespace Novapangeia.Dominio
{
    /// <summary>
    /// Essa classe auxilia a organização dos custos de construção/desenvolvimento/melhoramento
    /// de construções/tecnologias armazenando todos os custos nos diferentes tipos de recursos em um 
    /// unico atributo.
    /// </summary>
    public class Custo
    {
        public int ouro;
        public int madeira;
        public int minerio;
        public int comida;
        
        /// <summary>
        /// Construtor da classe, precisa receber como  parametros todos os respectivos custos.
        /// Caso uma construção não nessecite de determinado recuros, seu custo naquele 
        /// recurso será zero.EX: se não for necessãrio ouro para 
        /// construir um Quartel, o custo em Ouro do quartel será zero "0".
        /// </summary>
        /// <param name="ouro">Custo em Ouro da construção/desenvolvimento </param>
        /// <param name="madeira">Custo em Madeira da construção/desenvolvimento </param>
        /// <param name="minerio">Custo em Minerios da construção/desenvolvimento </param>
        /// <param name="comida">Custo em Comida da construção/desenvolvimento </param>
        public Custo(int ouro, int madeira, int minerio, int comida){
            this.ouro = ouro;
            this.madeira = madeira;
            this.minerio = minerio;
            this.comida = comida;
        }

        /// <summary>
        /// O metodo CustoRelativo deve ser usado quando uma tecnologia ou construção possui varios niveis de melhoria
        /// assim é possivel saber o custo de melhoramento atual baseado no nivel da mesma.
        /// (Totalmente Implementado)
        /// </summary>
        /// <param name="custobase">
        /// Objeto da classe Custo:
        /// Refere-se ao custo base da Tecnologia/Construção a ser melhorada.
        /// </param>
        /// <param name="nivel">
        /// Valor inteiro:
        /// Referente ao nivel atual da Tecnologia/Construção a ser melhorada.
        /// </param>
        /// <returns>
        /// Esse metodo retorna um objeto Custo contendo os custos atuais
        /// de melhoramento da Tecnologia/Construção em questão.
        /// </returns>
        public static Custo CustoRelativo(Custo custobase, int nivel){
            Custo CustoRel = new Custo(
                custobase.ouro * nivel,
                custobase.madeira * nivel,
                custobase.minerio * nivel,
                custobase.comida * nivel
                );
            return CustoRel;
        }
    }
}